#include "Record.h"

const int Record::NUMERO_RECORDES_GRAVADOS;
FILE* Record::arquivoRecorde;
int Record::recordes[Record::NUMERO_RECORDES_GRAVADOS];
bool Record::verificarRecordes = true;

int Record::checkNewRecord(int pontosJogador)
{
    int posicao = 0;
    if(Record::verificarRecordes)
    {
        posicao = Record::verifyAndSaveNewRecord(Record::loadOldRecords(),pontosJogador);
        Record::saveNewRecordFile();
    }
    verificarRecordes = false;
    return posicao;
}

int Record::loadOldRecords()
{
    int j = 0;
    Record::arquivoRecorde = fopen ("records.txt" , "a+");

    for(int i=0;i<Record::NUMERO_RECORDES_GRAVADOS;i++)
    {
        Record::recordes[i] = 0;
    }

    while (!feof(Record::arquivoRecorde))
    {
        fscanf(Record::arquivoRecorde,"%d",&Record::recordes[j]);
        j++;
    }
    j--;//O fim de arquivo demora mais um loop para reconhecer que o arquivo acabou.
    fclose(Record::arquivoRecorde);
    return j;//numero de recordes existentes.
}
int Record::verifyAndSaveNewRecord(int numeroRecordesExistentes, int pontosJogador)
{
    int posicao = 0;

    for(int i=0;i<=numeroRecordesExistentes;i++)
    {
        if((pontosJogador > Record::recordes[i]) || (!Record::recordes[i]))
        {
            for(int k=(Record::NUMERO_RECORDES_GRAVADOS-1);k>i;k--)
            {
                Record::recordes[k] = Record::recordes[k-1];
            }
            Record::recordes[i] = pontosJogador;
            posicao = i + 1;
            break;
        }
    }
    if(posicao > Record::NUMERO_RECORDES_GRAVADOS)
    {
        posicao = 0;
    }
    return posicao;
}
void Record::saveNewRecordFile()
{
    Record::arquivoRecorde = fopen ("records.txt" , "w");
    for(int w=0;w<Record::NUMERO_RECORDES_GRAVADOS;w++)
    {
        if(Record::recordes[w])
        {
            fprintf(Record::arquivoRecorde,"%d\n",Record::recordes[w]);
        }
        else
        {
            break;
        }
    }
    fclose(Record::arquivoRecorde);
}
